package com.ripservice.service;

import com.ripservice.entity.RouteSnapshotEntity;
import com.ripservice.mapper.RouteSnapshotMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 快照服务类
 * 提供对路由快照数据的业务逻辑处理
 */
@Service
@RequiredArgsConstructor
public class SnapshotService {

    /**
     * 路由快照数据访问层接口
     */
    private final RouteSnapshotMapper snapshotMapper;

    /**
     * 根据仿真ID获取所有快照
     *
     * @param simulationId 仿真ID
     * @return 路由快照列表
     */
    public List<RouteSnapshotEntity> getSnapshotsBySimulation(Long simulationId) {
        return snapshotMapper.findBySimulationId(simulationId);
    }

    /**
     * 根据拓扑ID获取所有快照
     *
     * @param topologyId 拓扑ID
     * @return 路由快照列表
     */
    public List<RouteSnapshotEntity> getSnapshotsByTopology(Long topologyId) {
        return snapshotMapper.findByTopology(topologyId);
    }

    /**
     * 根据拓扑ID和路由器ID获取快照列表
     *
     * @param topologyId 拓扑ID
     * @param routerId  路由器ID
     * @return 路由快照列表
     */
    public List<RouteSnapshotEntity> getSnapshotsByRouter(Long topologyId, String routerId) {
        return snapshotMapper.findByTopologyAndRouter(topologyId, routerId);
    }

    /**
     * 获取指定路由器的最新快照
     *
     * @param topologyId 拓扑ID
     * @param routerId  路由器ID
     * @return 最新的路由快照，如果不存在则返回null
     */
    public RouteSnapshotEntity getLatestSnapshotByRouter(Long topologyId, String routerId) {
        return snapshotMapper.findLatestByTopologyAndRouter(topologyId, routerId);
    }

    /**
     * 根据仿真ID删除快照
     *
     * @param simulationId 仿真ID
     */
    public void deleteSnapshotsBySimulation(Long simulationId) {
        snapshotMapper.deleteBySimulationId(simulationId);
    }

    /**
     * 根据拓扑ID删除快照
     *
     * @param topologyId 拓扑ID
     */
    public void deleteSnapshotsByTopology(Long topologyId) {
        snapshotMapper.deleteByTopologyId(topologyId);
    }


    /**
     * 根据多个条件组合查询快照
     *
     * @param topologyId 拓扑ID（可选）
     * @param simulationId 仿真ID（可选）
     * @param routerId 路由器ID（可选）
     * @return 符合条件的路由快照列表
     */
    public List<RouteSnapshotEntity> getSnapshotsByFilter(Long topologyId, Long simulationId, String routerId) {
        return snapshotMapper.findByFilter(topologyId, simulationId, routerId);
    }
}
